package com.ipartek.formacion.gestformwww.controlador;

import com.ipartek.formacion.gestformwww.modelo.ModeloCandidato;
import com.ipartek.formacion.gestformwww.modelo.beans.CandConv;
import com.ipartek.formacion.gestformwww.modelo.beans.Estado;
import com.ipartek.formacion.gestformwww.modelo.beans.Candidato;
import com.ipartek.formacion.gestformwww.modelo.beans.excepciones.GestorFormacionExcepcion;
import java.util.ArrayList;

import java.util.logging.Level;
import java.util.logging.Logger;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

/**
 *
 * @author Erik-Eneko
 */
public class GuardarNuevoCandidatoAccion implements Accion {

    private final String crearcandidato = "nuevo-candidato-accion";
    private final String mostrarcandidato = "mostrar-candidato-accion";
    private final String crearasignarcandidato = "crear-asignar-candidato-accion";

    /**
     * Descripción: ejecuta la acción de guardado y modificado del candidato
     * @param servlet
     * @param request
     * @param response
     * @return devuelve el router que dirige a la página que corresponda (a Inicio o a Principal)
     */
    public AccionRouter ejecuta(HttpServlet servlet, HttpServletRequest request, HttpServletResponse response) {
        Boolean nuevocandidato = true;
        AccionServlet as=(AccionServlet) servlet;
        HttpSession sesion = request.getSession();
        String canNIF;
        String canNSS;
        String canTlf1;
        String canTlf2;
        String canMail;
        String canDir;
        String canLocalidad;
        String canFechaNac;
        String canObserv;
        String canNom;
        String canApe1;
        String canApe2;
        String empId;
        String proId;
        String estId;
        String canActivo;

        Candidato candidato = new Candidato();
        ArrayList<String> errorm = new ArrayList<String>();
        ArrayList<String> mensajes = new ArrayList<String>();
        int intActivo = 0;
        int id = -1;
        CandConv candconv = new CandConv();
        ModeloCandidato modelo = (ModeloCandidato) servlet.getServletContext().getAttribute("ModeloCandidato");

        AccionRouter router = null;
        AccionRouter routerAuxiliar = null;
        String aleatorio = (String) sesion.getAttribute("aleatorioNuevoCandidato");

        if (aleatorio != null) {
            if (request.getParameter("aleatorioBorrarCandidato") != null) {
                if (request.getParameter("aleatorioBorrarCandidato").equals(aleatorio)) {
                    // Si se pulsa F5 o atras el aleatorio del request será igual al de la sesión.
                    // NO debe crease un curso (ya se creo anteriormente)
                    nuevocandidato = false;
                }
            }
        }

        if (sesion.getAttribute("usuario") != null && request.getMethod().equalsIgnoreCase("POST")) {
            canNIF = (String) request.getParameter("canNIF");
            canNSS = (String) request.getParameter("canNSS");
            canTlf1 = (String) request.getParameter("canTlf1");
            canTlf2 = (String) request.getParameter("canTlf2");
            canMail = (String) request.getParameter("canMail");
            canDir = (String) request.getParameter("canDir");
            canLocalidad = (String) request.getParameter("canLocalidad");
            canFechaNac = (String) request.getParameter("canFechaNac");
            canNom = (String) request.getParameter("canNom");
            canApe1 = (String) request.getParameter("canApe1");
            canApe2 = (String) request.getParameter("canApe2");
            canObserv = (String) request.getParameter("canObserv");
            empId = (String) request.getParameter("Empresa");
            proId = (String) request.getParameter("Procedencia");
            canActivo = (String) request.getParameter("canActivo");


            //FALTAN LAS VALIDACIONES
            if (!Verificador.esNSS(request.getParameter("canNSS"))) {
                errorm.add("error-nss-incorrecto");
            }else {
                candidato.setCanNss(request.getParameter("canNSS"));
            }
            if (request.getParameter("canId") != null) {
                candidato.setCanId(Integer.parseInt(request.getParameter("canId")));
             }

            if (!Verificador.validarDni(canNIF)) {
                errorm.add("error-nif-incorrecto");
            } else {
                candidato.setCanNif(canNIF);
            }

            if (!canFechaNac.trim().isEmpty() && !Verificador.fechaValida(canFechaNac.trim())) {
                errorm.add("error-fecha-nacimiento-vacio");
            } else {
                candidato.setCanFechaNac(canFechaNac);
            }

            if (!canTlf1.trim().isEmpty() && !Verificador.esCorrecto(canTlf1)) {
                errorm.add("error-tlf1-incorrecto");
            } else {
                candidato.setCanTlf1(canTlf1);
            }

            if (!canTlf2.trim().isEmpty() && !Verificador.esCorrecto(canTlf2)) {
                errorm.add("error-tlf2-incorrecto");
            } else {
                candidato.setCanTlf2(canTlf2);
            }

            if (!canMail.trim().isEmpty() && !Verificador.esCorrecto(canMail)) {
                errorm.add("error-mail-incorrecto");
            } else {
                candidato.setCanMail(canMail);
            }

            if (!canDir.trim().isEmpty() && !Verificador.esCorrecto(canDir)) {
                errorm.add("error-direccion-incorrecto");
            } else {
                candidato.setCanDir(canDir);
            }

            if (!canLocalidad.trim().isEmpty() && !Verificador.esCorrecto(canLocalidad)) {
                errorm.add("error-localidad-incorrecto");
            } else {
                candidato.setCanLocalidad(canLocalidad);
            }

            if (!Verificador.esCorrecto(canNom)) {
                errorm.add("error-nombre-incorrecto");
            } else {
                candidato.setCanNom(canNom);
            }

            if (!Verificador.esCorrecto(canApe1)) {
                errorm.add("error-apellido1-incorrecto");
            } else {
                candidato.setCanApe1(canApe1);
            }

            if (!Verificador.esCorrecto(canApe2)) {
                errorm.add("error-apellido2-incorrecto");
            } else {
                candidato.setCanApe2(canApe2);
            }


            if (empId == null || !Verificador.numeroValido(empId, true)) {
                errorm.add("error-empId-incorrecto");
            } else{
                candidato.setEmpId(Integer.parseInt(empId));
            }

            if (proId == null || !Verificador.numeroValido(proId, true)) {
                errorm.add("error-proId-incorrecto");
            } else if(proId!=null){
                candidato.setProId(Integer.parseInt(proId));
            }

            if (canActivo ==null || !Verificador.numeroValido(canActivo, true)) {
                errorm.add("error-activo-incorrecto");
            } else if(canActivo!=null){
                intActivo = Integer.parseInt(canActivo);
                if (intActivo == 0) {candidato.setCanActivo(false);}
                if (intActivo == 1) {candidato.setCanActivo(true);}
            }

//            Estado estado = new Estado();
//            if (estId == null) {
//                 estId= "1";
//            }
//
//            if (!Verificador.numeroValido(estId, true)) {
//                    errorm.add("error-estado-incorrecto");
//                } else if(estId!=null){
//                      try {
//                            estado= modelo.visualizarEstado(Integer.parseInt(estId));
//                            candidato.setEstado(estado);
//                        } catch (GestorFormacionExcepcion ex) {
//                            Logger.getLogger(GuardarNuevoCandidatoAccion.class.getName()).log(Level.SEVERE, null, ex);
//                            sesion.setAttribute("excepciones", ex.getMessage());
//                        }
//                }

            if (Verificador.esCorrecto(canObserv)){
                candidato.setCanObserv(canObserv);
            }


            if (errorm.isEmpty() && nuevocandidato) {
                if (request.getParameter("canId") == null) {
                    try {
                        id = modelo.crearCandidato(candidato);
                    } catch (GestorFormacionExcepcion ex) {
                        Logger.getLogger(GuardarNuevoCandidatoAccion.class.getName()).log(Level.SEVERE, null, ex);
                        sesion.setAttribute("excepciones", ex.getMessage());
                    }
                } else {
                    try {
                        id = modelo.modificarCandidato(candidato);
                    } catch (GestorFormacionExcepcion ex) {
                        Logger.getLogger(GuardarNuevoCandidatoAccion.class.getName()).log(Level.SEVERE, null, ex);
                        sesion.setAttribute("excepciones", ex.getMessage());
                    }
                }
                if (id < 0) {
                    try {
                        routerAuxiliar=as.getFactory().getAction(as.getNombreClaseRecurso(crearcandidato),servlet.getClass().getClassLoader()).ejecuta(servlet, request, response);
                    } catch (ClassNotFoundException ex) {
                        Logger.getLogger(GuardarNuevoCandidatoAccion.class.getName()).log(Level.SEVERE, null, ex);
                    } catch (InstantiationException ex) {
                        Logger.getLogger(GuardarNuevoCandidatoAccion.class.getName()).log(Level.SEVERE, null, ex);
                    } catch (IllegalAccessException ex) {
                        Logger.getLogger(GuardarNuevoCandidatoAccion.class.getName()).log(Level.SEVERE, null, ex);
                    }

                    errorm.add("error-candidato-nocreado");
                    sesion.setAttribute("errores", errorm);
                } else {
                    request.setAttribute("canId", id);
                    //request.setAttribute("visualizaalumno", alumno);
                    mensajes.add("mensaje-crear-candidato");
                    sesion.setAttribute("mensajes", mensajes);
                    //alumno.setAluId(id);
                    try{
                          routerAuxiliar=as.getFactory().getAction(as.getNombreClaseRecurso(mostrarcandidato),servlet.getClass().getClassLoader()).ejecuta(servlet, request, response);
                    } catch (ClassNotFoundException ex) {
                        Logger.getLogger(GuardarNuevoCandidatoAccion.class.getName()).log(Level.SEVERE, null, ex);
                    } catch (InstantiationException ex) {
                        Logger.getLogger(GuardarNuevoCandidatoAccion.class.getName()).log(Level.SEVERE, null, ex);
                    } catch (IllegalAccessException ex) {
                        Logger.getLogger(GuardarNuevoCandidatoAccion.class.getName()).log(Level.SEVERE, null, ex);
                    }

                }
            } else {
                if (nuevocandidato) {
                    sesion.setAttribute("errores", errorm);
                   
                    request.setAttribute("contenido", "mostrar-candidato");
                }
            }
            router = routerAuxiliar;
        } else {
            router = new AccionRouter("inicio");

        }
        return router;
    }


}

